import type {MockMethod} from 'vite-plugin-mock'

// 调用后返回用户数据
function createUserList() {
    return [{
        userId: 1,
        userName: 'admin',
        passWord: 'abc123',
        desc: '平台管理员账户',
        roles: ['平台管理员'],
        buttons: ['cuser.detail'],
        routes: ['home'],
        token: 'Admin Token'
    }, {
        userId: 2,
        userName: 'hnonot',
        passWord: 'abc123',
        desc: '系统管理员账户',
        roles: ['系统管理员'],
        buttons: ['cuser.detail', 'cuser.user'],
        routes: ['home'],
        token: 'System Token'
    }]
}

// 对外暴露一个数组，该数组内包含两个接口
// 登陆接口
// 获取用户信息的接口
export default [{
    url: '/api/user/login',
    method: 'post',
    //@ts-ignore
    response: ({ body }) => {
        // body为请求体    
        // 获取请求体中携带的用户名和密码
        const { userName, passWord } = body;
        // 调用createUserList函数,从它的返回值中判断是否有该用户
        // find方法会遍历这个用户列表,返回第一个符合条件的对象,没有则为空
        const checkUser = createUserList().find(
            (item) => item.userName === userName && item.passWord === passWord
        )
        console.log('Mock服务已启动');
        // checkUser是符合find返回的对象
        if (!checkUser) {
            return { code: 201, data: { message: '用户名或密码不正确' } }
        } else {
            const { token } = checkUser
            return { code: 200, data: { token } }
            // 登录成功后返回该用户的token,再使用该token通过userInfo接口获取用户数据
        }
    }
},
// 获取用户信息
{
    url: '/api/user/info',
    method: 'get',
    //@ts-ignore
    response: (request) => {
        // 获取请求头中携带的token
        const token = request.headers.token;
        // 从该token中判断是否有包含该token的用户
        const checkUser = createUserList().find(
            (item) => item.token === token
        )

        if (!checkUser) {
            return { code: 201, data: { message: '获取用户信息失败' } }
        } else {
            return { code: 200, data: { checkUser } }
        }
    }
}] as MockMethod[]